home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 19
/
CD_ASCQ_19_010295.iso
/
dos
/
prg
/
pas
/
swag
/
math.swg
/
0025_Dividing Fixed Integers.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-08-27
|
1KB
|
70 lines
{
SEAN PALMER
I'm using TP. Here are the fixed division routines I'm currently using
(they are, as you can see, quite specialized)
I had to abandon the original fixed division routines because I didn't
know how to translate the 386-specific instructions using DB. (MOVSX,
SHLD, etc)
}
type
fixed = record
f : word;
i : integer;
end;
shortFixed = record
f : byte;
i : shortint;
end;
{ this one divides a fixed by a fixed, result is fixed needs 386 }
function fixedDiv(d1, d2 : longint) : longint; assembler;
asm
db $66; xor dx, dx
mov cx, word ptr D1 + 2
or cx, cx
jns @S
db $66; dec dx
@S:
mov dx, cx
mov ax, word ptr D1
db $66; shl ax, 16
db $66; idiv word ptr d2
db $66; mov dx, ax
db $66; shr dx, 16
end;
{ this one divides a longint by a longint, result is fixed needs 386 }
function div2Fixed(d1, d2 : longint) : longint; assembler;
asm
db $66; xor dx, dx
db $66; mov ax, word ptr d1
db $66; shl ax, 16
jns @S;
db $66; dec dx
@S:
db $66; idiv word ptr d2
db $66; mov dx, ax
db $66; shr dx, 16
end;
{ this one divides an integer by and integer, result is shortFixed }
function divfix(d1, d2 : integer) : integer; assembler;
asm
mov al, byte
ptr d1 + 1
cbw
mov dx, ax
xor al, al
mov ah, byte ptr d1
idiv d2
end;